package com.sys.app.entity.tag;

import com.alibaba.druid.util.StringUtils;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.model.IModel;
import org.thymeleaf.model.IModelFactory;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractElementTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.templatemode.TemplateMode;

/**
 * meta标签，
 */
public class easyUIHidden extends AbstractElementTagProcessor {
    // 标签名
    private static final String TAG_NAME = "hidden";

    // 优先级
    private static final int PRECEDENCE = 10006;


    /*
   templateMode: 模板模式，这里使用HTML模板。
   dialectPrefix: 标签前缀。即xxx:text中的xxx。
   elementName：匹配标签元素名。举例来说如果是div，则我们的自定义标签只能用在div标签中。为null能够匹配所有的标签。
   prefixElementName: 标签名是否要求前缀。
   attributeName: 自定义标签属性名。这里为text。
   prefixAttributeName：属性名是否要求前缀，如果为true，Thymeeleaf会要求使用text属性时必须加上前缀，即xxx:text。
   precedence：标签处理的优先级，此处使用和Thymeleaf标准方言相同的优先级。
   removeAttribute：标签处理后是否移除自定义属性。
   */
    public easyUIHidden(String dialectPrefix) {
        super(
                // 模板类型为HTML
                TemplateMode.HTML,
                // 标签方言前缀
                dialectPrefix,
                // 标签名称
                TAG_NAME,
                // 将标签前缀应用于标签名称
                true,
                // 无属性名称：将通过标签名称匹配
                null,
                // 没有要应用于属性名称的前缀
                false,
                // 优先级
                PRECEDENCE
        );
    }
    /**
     * 处理自定义标签 DOM 结构
     *
     * @param iTemplateContext            模板页上下文
     * @param iProcessableElementTag      待处理标签
     * @param iElementTagStructureHandler 元素标签结构处理器
     */
    @Override
    protected void doProcess(ITemplateContext iTemplateContext, IProcessableElementTag iProcessableElementTag, IElementTagStructureHandler iElementTagStructureHandler) {
        String name = iProcessableElementTag.getAttributeValue("name");
        //type属性
        String vtype = iProcessableElementTag.getAttributeValue("vtype");
        //默认值
        String value = iProcessableElementTag.getAttributeValue("value");
        if (StringUtils.isEmpty(value) || "null".equals(value)) {
            value = "";
        }
        StringBuffer result = new StringBuffer();
        // <input id='customerId' name='customerId' value="453570" type='hidden' vtype='hidden' />
        //增删改查保存，关闭固定图标
        result.append("<input ");
        result.append("id=\"").append(name.replace(".","_")).append("\" ");
        result.append("name=\"").append(name).append("\" ");
        result.append("value=\"").append(value).append("\" ");
        result.append("type=\"").append("hidden").append("\" ");
        result.append("/>");
        // 创建将替换自定义标签的 DOM 结构
        IModelFactory modelFactory = iTemplateContext.getModelFactory();
        IModel model = modelFactory.createModel();
        // 这里是将字典的内容拼装成HTML
        model.add(modelFactory.createText(result));
        // 利用引擎替换整合标签
        iElementTagStructureHandler.replaceWith(model, false);
    }
}
